import axios from "axios";
import router from "@/router";
import ElementUI from "element-ui";
import { getItem, removeItem, removeItemFromSession } from "./storage";
import store from "@/store";

const request = axios.create({
  // 设置超时时间
  // timeout: 5000,
  // 基地址
  baseURL: "http://localhost:9000",
  // 设置headers
  headers: {
    "Content-Type": "application/json; charset=utf-8",
  },
});

// 添加请求拦截器
request.interceptors.request.use(
  (config) => {
    // 在发送请求之前做些什么
    // 发送请求前携带用户token信息
    const user = store.state.user;
    if (user) {
      config.headers["Authorization"] = user;
    }
    return config;
  },
  (error) => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(
  (response) => {
    // 判断token状态，失效了则清除
    if (response.data.code === 0) {
      if (
        response.data.msg === "非法token" ||
        response.data.msg === "token已过期" ||
        response.data.msg === "登录已失效，请重新登录"
      ) {
        // 清除Vuex中的token
        store.state.user = null;
        // 清除token
        removeItem("token");
        // 清除sessionStorage中的token
        removeItemFromSession("token");
        // 跳转到登录页面
        ElementUI.Message.error("登录已失效，请重新登录", { duration: 2000 });
        router.push("/login")
      }
    }
    return response;
  },
  (error) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 401 代表没有权限，跳转到登录页面
    if (error.response && error.response.status === 401) {
      router.push("/login");
    }
    ElementUI.Message.error(error.message, { duration: 2000 });
    return Promise.reject(error);
  }
);

export default request;
